Arduino MEGA 2560清除中断标志位 |
您所在的位置:网站首页 › arduino 2560中断 › Arduino MEGA 2560清除中断标志位 |
Arduino 开发板在使用时会遇到手动清除外部中断标志位的情况,比如为了防止误触,在attachInterrupt()函数前复位待使用的中断标志位。 一个外部中断0发生时在中断函数内detachInterrupt另外一个中断1,执行程序过程中外部触发中断1,但是由于失能,不能响应。程序执行后attachInterrupt被失能的中断1,然后系统会响应中断1的中断函数。就是中断1的响应虽然失能了,但是再次使能时又会响应失能期间的中断。是这样的吗?现在做两个红外传感器的外部中断,它们都会被先后触发,先触发哪个就响应哪个的程序,不响应后触发的程序。出现这种现象是因为AVR底层是这样的,中断分为“请求”和“使能”两层结构。事件发生后“请求”被硬件置位,只要“使能”开启就会依优先级进行中断。 attach/detach 两个函数都是只操作了“使能”控制位,而请求被保持了,才会造成上数局面。非要清除请求的话,直接在 寄存器的层面是请求位写 1,即可清除“请求”。Arduino UNO设置两个外部中断的问题-Arduino中文社区 - Powered by Discuz! Arduino UNO直接操作EIFR寄存器就可以: EIFR= _BV(INTF0); // Clear INT0 Request//清除UNO中断0请求 EIFR= _BV(INTF1); // Clear INT1 Request//清除UNO中断1请求 Arduino UNO只有两个中断,有些项目会使用Arduino MGEA 2560控制器(有6个中断中断0~5)。Arduino MEGA 2560操作EIFR寄存器有些不一样 使用这种直接操作寄存器还是少数情况,改变程序结构也可以达到相同效果。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |